import fs from 'fs'
import path from 'path'
import Router from '@koa/router'

// 自动加载路由模块
export function loadRoutes(app: import('koa').DefaultContext['app']) {
  const router = new Router()

  try {
    // 获取路由目录下的所有路由文件
    const routeFiles = fs.readdirSync(__dirname)

    routeFiles.forEach((file) => {
      // 排除 index.ts/index.js 文件本身和其他非路由文件
      if (
        file !== 'index.ts' &&
        file !== 'index.js' &&
        ((file.endsWith('.ts') && !file.endsWith('.d.ts')) ||
        file.endsWith('.js'))
      ) {
        try {
          // 动态导入路由模块
          const routePath = path.join(__dirname, file)
          const routeModule = require(routePath)

          // 检查模块是否包含默认导出且是路由实例
          if (
            routeModule.default &&
            typeof routeModule.default.routes === 'function'
          ) {
            router.use(routeModule.default.routes())
            // console.log(`路由 ${file} 已成功加载`)
          } else {
            console.warn(`路由文件 ${file} 没有默认导出路由实例`)
          }
        } catch (error) {
          console.error(`加载路由文件 ${file} 时出错:`, error)
        }
      }
    })

    // 注册路由中间件
    app.use(router.routes())
    app.use(router.allowedMethods())

    console.log('所有路由已成功注册')
  } catch (error) {
    console.error('路由加载过程中发生错误:', error)
  }
}